// #include <iostream>
// #include <string>
// #include <strings.h>
// #include <sys/types.h>
// #include <sys/socket.h>
// #include <netinet/in.h>
// #include <arpa/inet.h>
// #include <cstring>
// int main(int argc,char*argv[])
// {

//     if(argc!=3)
//     {
//         printf("fail\n");
//         return -1;
//     }
//     //获取网络序列
//     std::string ip=argv[1];
//     u_int16_t port=std::stoi(argv[2]);
//     //创建
//     int sockfd=socket(AF_INET,SOCK_DGRAM,0);
//     if(sockfd<0)
//     {
//         perror("socket fail");

//     }
//     //填写服务器信息
//     struct sockaddr_in server;
//     server.sin_family=AF_INET;
//     server.sin_port=htons(port);
//     server.sin_addr.s_addr=inet_addr(ip.c_str());
//     socklen_t len=sizeof(server);
//     //开始发送并且接收信息
//     while(1)
//     {
//         std::string input;
//         printf("plase say@ ");
//       std::getline(std::cin,input);
//       //发送消息
//       sendto(sockfd,input.c_str(),input.size(),0,(sockaddr*)&server,sizeof(server));
//       //接收信息
//       char buffer[1024];
//       int n=recvfrom(sockfd,buffer,sizeof(buffer)-1,0,(sockaddr*)&server,&len);

//       if(n>0)
//       {
//         buffer[n]=0;
//         std::cout<<buffer<<std::endl;
//       }
//     }

//     return 0;
// }

#include <iostream>
#include <string>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>

int main(int argc, char* argv[]) {
    if (argc != 3) {
        std::cerr << "Usage: " << argv[0] << " <server_ip> <server_port>" << std::endl;
        return 1;
    }

    int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
    if (sockfd < 0) {
        perror("socket failed");
        return 1;
    }

    sockaddr_in server;
    server.sin_family = AF_INET;
    server.sin_port = htons(std::stoi(argv[2]));
    server.sin_addr.s_addr = inet_addr(argv[1]);

    while (true) {
        std::string input;
        std::cout << "Please input:";
        std::getline(std::cin, input);

        sendto(sockfd, input.c_str(), input.size(), 0, (sockaddr*)&server, sizeof(server));

        char buffer[1024];
        sockaddr_in peer;
        socklen_t len = sizeof(peer);
        ssize_t n = recvfrom(sockfd, buffer, sizeof(buffer) - 1, 0, (sockaddr*)&peer, &len);

        if (n > 0) {
            buffer[n] = '\0';
            std::cout << "Response: " << buffer << std::endl;
        }
    }

    close(sockfd);
    return 0;
}